// ajax请求函数
function ajax_tool(method, url, data) {
    return new Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest();
        // 根据不同的请求方式，将参数放在不同的地方
        if (method == 'GET') {
            // get 操作对应拼接操作
            // 注意的是两个地方：1.最前面+？ 2.多个键值对通过&来拼接
            let newUrl = url + "?";
            for (let key in data) {
                newUrl += `${key}=${data[key]}&`
            }
            newUrl = newUrl.slice(0, -1);
            xhr.open(method, newUrl);
            xhr.send();
        } else {
            // 专门用来拼接字符用的，拼接完毕之后放到send()里
            let postData = "";
            for (let key in data) {
                postData += `${key}=${data[key]}&`
            }
            postData = postData.slice(0, -1);
            xhr.open(method, url);
            // 设置发送请求格式，是以字符串的形式发送
            // 注意：关于请求头的设置，一定要放在open()之后，大家记住就好
            xhr.setRequestHeader('Content-Type', "application/x-www-form-urlencoded")
            xhr.send(postData);
        }
        // get请求     拼接到url上
        // post请求    放在send参数    设置格式
        // 不管是哪种方式都是键值对形式存放
        xhr.addEventListener('readystatechange', function() {
            if(xhr.readyState == 4) {
                if(xhr.status == 200) {
                    // xhr.responseText
                    resolve(JSON.parse(xhr.responseText));
                } else {
                    reject('请求失败了，请求检查参数或地址是否有误');
                }
            }
        })
    })
}

// 防抖函数封装
function myDebounce(handle, wait, immediate) {
    let timer = null;
    let init = null;
    return function proxy() {
        let that = this;
        let args = arguments;
        init = immediate && !timer;
        clearTimeout(timer);
        timer = setTimeout(function() {
            timer = null;
            !immediate ? handle.call(that, args[0]) : null;
        }, wait);
        init ? handle.call(that, args[0]) : null;
    }
}

//获取参数对象并转成对象输出
function changObj(str){
    let obj = {}
    str  = str.slice(1)
    // console.log(str)
    str.split('&').forEach(function(ele){
        // ele  "健名=键值"
        obj[ele.split('=')[0]]=ele.split('=')[1]
    })
    return obj

}

export {ajax_tool, myDebounce, changObj}